#include <iostream>
#include "string.h"

using namespace std;

int main(void) {
    String s1("hello");
    String s2("world");

    String s3(s2);
    cout << s3 << endl;

    s3 = s1;
    cout << s3 << endl;
    cout << s2 << endl;
    cout << s1 << endl;

    return 0;
}
/**
Stack：是存在于某作用域(scope)的一块内存空间(memory space)。
例如当你调用函数，函数本身即会形成一个stack用来放置它所接受的参数，以及返回值。在函数本体内声明的任何变量，其所使用的内存块都取自上述stack。
stack object，其生命在作用域(scope)结束之后结束。这种作用域内的object，又称为auto object，因为它会被[自动]清理。

Heap(system heap)：是指操作系统提供的一块global内存空间，程序动态分配(dynamic allocated)从其中获得若干区块(blocks)。
heap object，其生命在它被delete之后结束，一定要delete，否则出现内存泄露，当作用域结束，指针无法访问了，heap object仍然存在，没有机会delete

static object，其生命在作用域(scope)结束之后仍然存在，直到整个程序结束。

global object，其生命在整个程序结束之后才结束，可以把它视为一种static object，其作用域是[整个程序]。

*/